/*
 * Vuex 状态管理配置文件
 * 
 * 功能说明：
 * 1. 管理应用的全局状态（如用户信息、练习模式等）
 * 2. 提供状态修改的方法（mutations）
 * 3. 提供异步操作的方法（actions）
 * 4. 定义菜单配置数据
 * 
 * Vuex核心概念：
 * - state: 状态数据
 * - mutations: 同步修改状态的方法
 * - actions: 异步操作的方法
 * - getters: 计算属性（类似Vue的computed）
 * 
 * @Author: ShanZhu
 * @Date: 2023-11-23
 */

// 导入Vue和Vuex
import VUE from 'vue'
import VUEX from 'vuex'

// 使用Vuex插件
VUE.use(VUEX)

// 定义全局状态数据
const state = {
  isPractice: false, // 练习模式标志：true为练习模式，false为正式考试模式
  flag: false, // 菜单栏左右滑动标志：控制侧边栏的显示/隐藏
  userInfo: null, // 用户信息：存储当前登录用户的信息

  // 菜单配置数据：定义教师/管理员界面的菜单结构
  menu: [
    {
      index: '1', // 菜单索引
      title: '考试管理', // 菜单标题
      icon: 'icon-kechengbiao', // 菜单图标
      content: [
        { item2: '考试查询', path: 'selectExam' }, // 子菜单项：考试查询
        { item3: '添加考试', path: '/addExam' } // 子菜单项：添加考试
      ],
    },
    {
      index: '2', // 菜单索引
      title: '题库管理', // 菜单标题
      icon: 'icon-tiku', // 菜单图标
      content: [
        { item2: '所有题库', path: '/selectAnswer' }, // 子菜单项：所有题库
        { item3: '增加题库', path: '/addAnswer' }, // 子菜单项：增加题库
        { path: '/addAnswerChildren' } // 子菜单项：添加题库子项
      ],
    },
    {
      index: '3', // 菜单索引
      title: '成绩查询', // 菜单标题
      icon: 'icon-performance', // 菜单图标
      content: [
        { item1: '学生成绩查询', path: '/allStudentsGrade' }, // 子菜单项：学生成绩查询
        { path: '/grade' }, // 子菜单项：成绩图表
        { item2: '成绩分段查询', path: '/selectExamToPart' }, // 子菜单项：成绩分段查询
        { path: '/scorePart' } // 子菜单项：成绩分布
      ],
    },
    {
      index: '4', // 菜单索引
      title: '学生管理', // 菜单标题
      icon: 'icon-role', // 菜单图标
      content: [
        { item1: '学生管理', path: '/studentManage' }, // 子菜单项：学生管理
        { item2: '添加学生', path: '/addStudent' } // 子菜单项：添加学生
      ],
    },
  ],
}

// 定义同步修改状态的方法（mutations）
const mutations = {
  // 修改练习模式状态
  practice(state, status) {
    state.isPractice = status // 设置练习模式标志
  },

  // 切换菜单栏显示状态
  toggle(state) {
    state.flag = !state.flag // 切换flag的值（true变false，false变true）
  },

  // 修改用户信息
  changeUserInfo(state, info) {
    state.userInfo = info // 设置用户信息
  }
}

// 定义计算属性（getters）- 当前为空
const getters = {
  // 可以在这里定义一些基于state的计算属性
  // 例如：获取用户姓名、获取菜单项数量等
}

// 定义异步操作的方法（actions）
const actions = {
  // 异步获取用户信息（可以在这里调用API）
  getUserInfo(context, info) {
    // context.commit调用mutation来修改状态
    context.commit('changeUserInfo', info)
  },

  // 异步设置练习模式状态
  getPractice(context, status) {
    // context.commit调用mutation来修改状态
    context.commit('practice', status)
  }
}

// 创建并导出Vuex store实例
export default new VUEX.Store({
  state, // 状态数据
  mutations, // 同步修改方法
  getters, // 计算属性
  actions, // 异步操作方法
  // store
})
